LocalConnection.allowDomain

Доступность

Flash Player 6; функциональность изменилось, начиная с Flash Player 7.

Синтаксис

receiving_lc.allowDomain = function([sendingDomain:String]) : Boolean {
  // Your statements here return true or false
}

Параметры

sendingDomain Строка, определяющая необязательный параметр, домен SWF файла, содержащего объект-отправитель LocalConnection.

Возвращает

Ничего.

Описание

Обработчик события; вызывается, когда receiving_lc получает запрос на выполнение метода от объекта LocalConnection, играющего роль отправителя. Flash ожидает, что код, который Вы используете при переопределении данного обработчика, будет возвращать Булеву величину, то есть true или false. Если обработчик не возвращает true, запрос отправителя игнорируется и метод не выполняется.

При отсутствии определения этого обработчика, Flash Player применяет стандартные политики безопасности, состоящие в следующем:

my_lc.allowDomain = function (sendingDomain)
{
  return (sendingDomain == this.domain());
}

Используйте LocalConnection.allowDomain для разрешения объектам LocalConnection объектам-отправителям из других (или всех) доменов вызывать методы LocalConnection объекта-получателя. Если Вы не определили параметр sendingDomain , скорее всего, Вы хотите разрешить доступ из любого домена, тогда код в вашем обработчике будет очень простым: return true. Если же Вы указали параметр sendingDomain, значит, Вы хотите сверить значение sendingDomain со значениями из списка разрешенных доменов. В примерах далее показаны оба случая.

В файлах, разработанных под Flash Player версии 6, параметр sendingDomain указывает на над-домен отправителя. В файлах, разработанных под Flash Player версии 7 или более поздних версий, параметр sendingDomain содержит непосредственно домен отправителя. В общем случае, для того, чтобы позволить SWF файлам как из www.domain.com, так и store.domain.com, отправлять запросы получателю, необходимо указать разрешение для обоих доменов.

//  Для Flash Player 6
receiving_lc.allowDomain = function(sendingDomain) {
  return(sendingDomain=="domain.com");
}
//  Для Flash Player 7 или более поздних версий
receiving_lc.allowDomain = function(sendingDomain) {
  return(sendingDomain=="www.domain.com" ||
    sendingDomain=="store.domain.com");
}

Также, для файлов, разработанных под Flash Player 7 или более поздних версий, Вы не можете использовать этот метод, чтобы позволить SWF файлам, полученным по защищенному протоколу (HTTPS) взаимодействовать с SWF файлам, полученным по обычному протоколу HTTP; в этом случае необходимо использовать LocalConnection.allowInsecureDomain .

Вы можете столкнуться со следующей ситуаций: представьте, что Вы загружаете SWF файл в данный SWF файл из другого домена. Вы хотите применить данный метод, причем так, чтобы "дочерний" SWF файл мог при помощи LocalConnection вызывать родительский SWF файл, однако, Вы не знаете, из какого домена будет загружен "дочерний" SWF файл. Такое может случить, например, когда Вы используете переадресацию для распределения загрузки или серверы некой третьей стороны.

В этом случае Вы можете воспользоваться свойством MovieClip._url. Например, если Вы загружаете SWF файл в my_mc, Вы можете в реализации данного обработчика проверять, совпадает ли домен отправителя с доменом my_mc._url. (Конечно, необходимо вычленить домен из полного URL, возвращаемого my_mc._url.)

Если Вы решили поступить подобным образом, убедитесь, что Вы дождались конца загрузки SWF файла в my_mc, иначе свойство _url не покажет вам настоящего положения файла. Лучшим выходом из ситуации будет использование обработчика события MovieClipLoader.onLoadComplete.

Также Вы можете столкнуться со следующей проблемой: Вы можете создать дочерний SWF файл, которому необходимо принимать вызовы по LocalConnection от родительского, не зная его домена. В этом случае при проверке используйте _parent._url. Опять же, Вы должны вычленить домен из полного URL, который вернет _parent._url. Однако, в данном случае дожидаться конца загрузки не надо, так как код все равно раньше исполнен не будет.

Пример

В следующем примере как объект LocalConnection в SWF файле-получателье может разрешить SWF файлам из любого домена вызывать исполнение его методов. Сравните этот пример с примером статьи LocalConnection.connect(), в которой только SWF файлы из того же самого домена могут вызывать метод trace() в SWF файле-получателе. Если Вы хотите использовать символ подчеркивания (_) в имени соединения, смотри LocalConnection.send().

this.createTextField("welcome_txt", this.getNextHighestDepth(), 10, 10, 100, 20);
var my_lc:LocalConnection = new LocalConnection();
my_lc.allowDomain = function(sendingDomain:String) {
  domain_txt.text = sendingDomain;
  return true;
};
my_lc.allowInsecureDomain = function(sendingDomain:String) {
  return (sendingDomain == this.domain());
}
my_lc.sayHello = function(name:String) {
  welcome_txt.text = "Привет, "+name;
};
my_lc.connect("_mylc");

В следующем примере SWF файлу отправляется строка, которая потом отображается в окне статуса, удалось ли подключение по LocalConnection. Окно статуса реализовано при помощи компонента TextInput name_ti, компонента TextArea status_ta и компонента Button send_button.

var sending_lc:LocalConnection;
var sendListener:Object = new Object();
sendListener.click = function(evt:Object) {
  sending_lc = new LocalConnection();
  sending_lc.onStatus = function(infoObject:Object) {
    switch (infoObject.level) {
    case 'status' :
      status_ta.text = "Подключение LocalConnection успешно.";
      break;
    case 'error' :
      status_ta.text = "Подключение LocalConnection не удалось.";
      break;
    }
  };
  sending_lc.send("_mylc", "sayHello", name_ti.text);
};
send_button.addEventListener("click", sendListener);

In В следующем примере, SWF ролик-получатель, находящийся в домене thisDomain.com, принимает вызовы от SWF файлов-отправителей из домена thisDomain.com или thatDomain.com:

var aLocalConn:LocalConnection = new LocalConnection();
aLocalConn.Trace = function(aString) {
  aTextField += aString+newline;
};
aLocalConn.allowDomain = function(sendingDomain) {
  return (sendingDomain == this.domain());
};
aLocalConn.connect("_mylc");

При публикации под Flash Player 7 или более позднюю версию, домен проверяется в точности. Это значит, что если SWF файлы в примере расположены в домене www.thatDomain.com, пример работать не будет, однако если она расположены в thatDomain.com, пример работоспособен.

См. также

LocalConnection.connect(), LocalConnection.domain(), LocalConnection.send(), MovieClip._url, MovieClipLoader.onLoadComplete, _parent